package Thread;

import java.util.concurrent.BlockingDeque;
import java.util.concurrent.LinkedBlockingDeque;

//创建两个线程，，完成“生产者与消费者模型”
//第一个线程为生产者线程，另一个线程为消费者线程；
//通过消息队列的添加和删除元素来完成该功能；进一步体会消息队列的阻塞功能；
//观察结果发现:完成了关于生产者与消费者模型；
//但是很难观察出消息队列的阻塞功能；
//因此：设置一个线程休眠功能；
// ①设置在生产者进程下：会出现：消费者消耗>生产者生产；
// 就会出现生产者生产一个，消费者消耗一个；
// ②设置在消费者进程下：会出现：生产者猛烈生产>消费者的消耗；
// 会出现：生产者将消息队列填满，后续消费者消耗一个，生产者生产一个；
public class Demo30 {
    public static void main(String[] args) throws InterruptedException {
        BlockingDeque<Integer> blockingDeque=new LinkedBlockingDeque<>(100);
      Thread t1=new Thread(()->{
          int n=0;
          while(true){
              try {
                  //Thread.sleep(1000);
                  blockingDeque.put(n);
                  System.out.println("生产元素"+n);
                  n++;
                  Thread.sleep(1000);
              } catch (InterruptedException e) {
                  throw new RuntimeException(e);
              }
          }
      },"producer");
      Thread t2=new Thread(()->{
          while (true){
              try{
                  Thread.sleep(1000);
                  Integer n=blockingDeque.take();
                  System.out.println("消费者"+n);
              } catch (InterruptedException e) {
                  throw new RuntimeException(e);
              }
          }
      },"consumer");
        t1.start();
        t2.start();
    }
}
